import os
import re
from pathlib import Path

def clean_markdown(content):
    """清洗Markdown内容，移除所有标记符号"""
    
    # 1. 移除图片 ![alt](url) 或 ![alt][id]
    content = re.sub(r'!\[.*?\]\(.*?\)', '', content)
    content = re.sub(r'!\[.*?\]\[.*?\]', '', content)
    
    # 2. 移除链接 [text](url) 或 [text][id]，但保留文本
    content = re.sub(r'\[([^\]]*?)\]\([^\)]*?\)', r'\1', content)
    content = re.sub(r'\[([^\]]*?)\]\[.*?\]', r'\1', content)
    
    # 3. 移除重点符号（粗体、斜体）
    content = re.sub(r'\*\*(.*?)\*\*', r'\1', content)  # **bold**
    content = re.sub(r'\*(.*?)\*', r'\1', content)       # *italic*
    content = re.sub(r'__(.*?)__', r'\1', content)       # __bold__
    content = re.sub(r'_(.*?)_', r'\1', content)         # _italic_
    
    # 4. 移除标题标记 #, ##, ### 等
    content = re.sub(r'^#{1,6}\s*', '', content, flags=re.MULTILINE)
    
    # 5. 移除引用标记 >
    content = re.sub(r'^>\s*', '', content, flags=re.MULTILINE)
    
    # 6. 移除列表标记 -, +, *, 数字.
    content = re.sub(r'^\s*[-+*]\s+', '', content, flags=re.MULTILINE)  # 无序列表
    content = re.sub(r'^\s*\d+\.\s+', '', content, flags=re.MULTILINE)  # 有序列表
    
    # 7. 移除代码块 ```...```
    content = re.sub(r'```[\s\S]*?```', '', content)
    
    # 8. 移除行内代码 `code`
    content = re.sub(r'`([^`]+?)`', r'\1', content)
    
    # 9. 移除水平线 ---, ***, ___
    content = re.sub(r'^[\*_\-]{3,}\s*$', '', content, flags=re.MULTILINE)
    
    # 10. 移除HTML标签
    content = re.sub(r'<[^>]+>', '', content)
    
    # 11. 移除转义字符
    content = content.replace('\\', '')
    
    # 12. 合并多个空行为一个空行
    content = re.sub(r'\n\s*\n\s*\n+', '\n\n', content)
    
    # 13. 移除行尾空格
    content = re.sub(r'[ \t]+$', '', content, flags=re.MULTILINE)
    
    return content

def process_markdown_files(folder_path):
    """处理指定文件夹中的所有markdown文件"""
    folder = Path(folder_path)
    
    # 确保文件夹存在
    if not folder.exists():
        print(f"错误：文件夹 {folder_path} 不存在")
        return
    
    # 遍历所有.md文件
    md_files = list(folder.glob("*.md"))
    
    if not md_files:
        print(f"在 {folder_path} 中没有找到 .md 文件")
        return
    
    print(f"找到 {len(md_files)} 个Markdown文件，开始清洗...")
    
    for md_file in md_files:
        try:
            # 读取文件内容
            with open(md_file, 'r', encoding='utf-8') as f:
                content = f.read()
            
            # 清洗内容
            cleaned_content = clean_markdown(content)
            
            # 生成输出文件名（相同文件名，.txt扩展名）
            output_file = folder / f"{md_file.stem}.txt"
            
            # 保存清洗后的内容
            with open(output_file, 'w', encoding='utf-8') as f:
                f.write(cleaned_content)
            
            print(f"✓ 已处理: {md_file.name} -> {output_file.name}")
            
        except Exception as e:
            print(f"✗ 处理文件 {md_file.name} 时出错: {e}")
    
    print("\n清洗完成！")

# 主程序
if __name__ == "__main__":
    # 使用相对路径 "all" 文件夹
    folder_path = "all_md"
    process_markdown_files(folder_path)
